#include "boss.h"
#include "config.h"

#include <ctime>

boss::boss()
{
    //加载boss资源
    m_boss.load(BOSS_PATH);

    //boss位置
    m_X=GAME_WIDTH;//初始在最右侧
    m_Y=(GAME_HEIGHT-m_boss.height())*0.5;

    //boss状态
    m_Free=true;

    //boss速度
    m_speed=BOSS_SPEED;

    //boss血量
    m_health=BOSS_HEALTH;

    //初始化boss行动时间
    m_move=0;

    //初始化boss停留时间
    m_stop=1;

    //boss边框
    m_Rect.setWidth(m_boss.width());
    m_Rect.setHeight(m_boss.height());
    m_Rect.moveTo(m_X,m_Y);

    //随机数种子
    srand((unsigned int) time(NULL));
}

void boss::updatePosition()
{
    if((m_Free==false)&&(m_X>=GAME_WIDTH-m_Rect.width()))
    {
        m_X-=m_speed;//出场向左移动
        m_Rect.moveTo(m_X,m_Y);//更新坐标
    }
    if((m_Free==false)&&(m_X<GAME_WIDTH-m_Rect.width()))
    {
        if(m_move!=0)
        {
            m_move++;//运动时间增加

            //随机上下移动
            if(m_randnum%2==0)
                m_Y+=m_speed;//向下移动
            else
                m_Y-=m_speed;//向上移动
            m_Rect.moveTo(m_X,m_Y);

            //到达运动时间最大值
            if(m_move==BOSS_MOVETIME)
            {
                m_move=0;//停止行动
                m_stop=1;//开始停留
            }
        }
        if(m_stop!=0)
        {
            m_stop++;//停留时间增加
            if(m_stop==BOSS_STOPTIME)
            {
                m_stop=0;//结束停留
                m_move=1;//开始行动

                //随机生成0或1，决定boss向上还是向下移动
                m_randnum=rand()%(2);
            }
        }

        //边界检测
        if(m_Y<=0)
            m_Y=0;
        if(m_Y>=GAME_HEIGHT-m_Rect.height())
            m_Y=GAME_HEIGHT-m_Rect.height();
    }
}
